home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DS-CD ROM 2 1993 August
/
DS CD-ROM 2.Ausgabe (August 1993).iso
/
programm
/
ds0257
/
demo.exe
/
DATETIME.DEM
< prev
next >
Wrap
Text File
|
1992-02-16
|
11KB
|
404 lines
; ----------------------------
; DATETIME.DEM - Demoprogramm für die Routinen aus DATETIME.LIB
; (für den A86)
;
; (c) Bernd Schemmer 1990 - 1992
; Letzter Update: 15.02.1992
;
; Übersetzen:
; A86 DATETIME.DEM DEMOS.INC TO DATETIME.COM
;
; Hinweis: Die Environment-Variable 'A86' muß den Dateinamen 'MACROS.MAC'
; enthalten und die .LIB-Dateien müssen über die Datei A86.LIB
; erreichbar sein.
;
; ---------------------------
jmp start ; Daten überspringen
logo db CR,LF
db 'DATETIME.DEM - Demoprogramm für die Routinen aus DATETIME.LIB'
db CR,LF
db '--------------------------------------------------------------'
db CR,LF
db CR,LF
GETLENGTH logo
; --------
; Daten
;
TimeTable db 12 dup (0) ; Definition der Zeit-Tabelle für die Stopuhr-
; routinen
start:
call ShowLogo ; Logo ausgeben und Speicherblock verkleinern
call Starte_StopUhr ; Stopuhr starten ...
call Ermittle_Datum ; akt. Datum ermitteln
call Ermittle_Zeit ; akt. Zeit ermitteln
call Setze_Datum ; neues Datum setzen
call Setze_Zeit ; neue Zeit setzen
Ende:
call Stoppe_StopUhr ; Stopuhr stoppen
EndProcess 0
; ----------------------------
; Setze_Datum
;
; Funktion: Setzen des Datums
;
msg5 db CR,LF
db 'Bitte geben Sie das neue Datum ein (Form: TT.MM.JJ{JJ})'
db CR,LF
db '(<RETURN> -> nicht ändern): '
GETLENGTH msg5
error2 db 'Fehler: Eingegebenes Datum hat falsches Format!'
db CR,LF
db 'Nochmal versuchen?'
GETLENGTH error2
puffer2 db 255,256 dup 0 ; Puffer für das neue Datum
Setze_Datum:
WRITE_STRING msg5
; Neues Datum lesen
mov dx,offset puffer2
mov ah,0AH
int 021h
call ShowCR_LF
mov al,b puffer2+1 ; AL = Anzahl eingegebener Zeichen
or al,al
je >l1 ; nur RETURN gedrückt
; neues Datum setzen
mov si,offset puffer2+1
; DS:SI zeigt auf das eingegebene Datum
; als String!
call SetDate
jnc >l0
; Format-Fehler!
WRITE_STRING error2
mov ah,08
int 021h
call ShowCR_LF
; Neuer Versuch ?
cmp al,'J'
IF e jmp Setze_Datum
cmp al,'j'
if e jmp Setze_Datum
cmp al,CR
if e jmp Setze_Datum
l0:
call Ermittle_Datum ; und akt. Datum nochmal ausgeben
l1:
ret
; ----------------------------
; Setze_Zeit
;
; Funktion: Setzen der Zeit
;
msg4 db CR,LF
db 'Bitte geben Sie die neue Zeit ein (Form: HH.MM.SS{:HH})'
db CR,LF
db '(<RETURN> -> nicht ändern): '
GETLENGTH msg4
error1 db 'Fehler: Eingegebene Zeit hat falsches Format!'
db CR,LF
db 'Nochmal versuchen?'
GETLENGTH error1
puffer1 db 255,256 dup 0 ; Puffer für die neue Zeit
Setze_Zeit:
WRITE_STRING msg4
; Neue Zeit lesen
mov dx,offset puffer1
mov ah,0AH
int 021h
call ShowCR_LF
mov al,b puffer1+1 ; AL = Anzahl eingegebener Zeichen
or al,al
je >l1 ; nur RETURN gedrückt
; neue Zeit setzen
mov si,offset puffer1+1
; DS:SI zeigt auf die eingegebene Zeit
; als String!
call SetTime
jnc >l0
; Format-Fehler!
WRITE_STRING error1
mov ah,08
int 021h
call ShowCR_LF
; Neuer Versuch ?
cmp al,'J'
IF e jmp Setze_Zeit
cmp al,'j'
if e jmp Setze_Zeit
cmp al,CR
if e jmp Setze_Zeit
l0:
call Ermittle_Zeit ; und akt. Zeit nochmal ausgeben
l1:
ret
; ----------------------------
; Ermittle_Datum
;
; Funktion: Ermittelt das akt. Datum
;
msg2 db CR,LF
db 'Das aktuelle Datum ist'
_date1 db ' '
db CR,LF
db 'oder in anderer Form: '
_date2 db ' '
db CR,LF
db 'oder in anderer Form: '
_date3 db ' '
db CR,LF
db 'oder in anderer Form: '
_date4 db ' '
db CR,LF
GETLENGTH msg2
Ermittle_Datum:
mov ax,2020h ; Zuerst altes Datum in den Meldungen ausblanken
mov cx,23xD
mov di,offset _date1
push cx
rep stosw
pop cx
mov di,offset _date2
push cx
rep stosw
pop cx
mov di,offset _date3
push cx
rep stosw
pop cx
mov di,offset _date4
push cx
rep stosw
pop cx
; Datum ermitteln in allen 4 Formen
mov al,_date1
push ax ; Byte für Längenzähler sichern
mov di,offset _date1
mov ax,0
call GetDate
pop ax
mov _date1,al ; Längenzähler überschreiben
mov al,_date2
push ax ; Byte für Längenzähler sichern
mov di,offset _date2
mov ax,1
call GetDate
pop ax
mov _date2,al ; Längenzähler überschreiben
mov al,_date3
push ax ; Byte für Längenzähler sichern
mov di,offset _date3
mov ax,2
call GetDate
pop ax
mov _date3,al ; Längenzähler überschreiben
mov al,_date4
push ax ; Byte für Längenzähler sichern
mov di,offset _date4
mov ax,3
call GetDate
pop ax
mov _date4,al ; Längenzähler überschreiben
; und Maske ausgeben
WRITE_STRING msg2
ret
; ----------------------------
; Ermittle_Zeit
;
; Funktion: Ermittelt die akt. Zeit
;
msg3 db CR,LF
db 'Die aktuelle Zeit ist'
_time4 db ' '
db CR,LF
db 'oder in anderer Form: '
_time5 db ' '
db CR,LF
db 'oder in anderer Form: '
_time6 db ' '
db CR,LF
GETLENGTH msg3
Ermittle_Zeit: ; Zuerst alte Zeit in den Meldungen ausblanken
mov ax,2020h
mov cx,23xD
mov di,offset _time4
push cx
rep stosw
pop cx
mov di,offset _time5
push cx
rep stosw
pop cx
mov di,offset _time6
push cx
rep stosw
pop cx
; Zeit ermitteln in allen 3 Formen
mov al,_time4
push ax ; Byte für Längenzähler sichern
mov di,offset _time4
mov ax,0
call GetTime
pop ax
mov _time4,al ; Längenzähler überschreiben
mov al,_time5
push ax ; Byte für Längenzähler sichern
mov di,offset _time5
mov ax,1
call GetTime
pop ax
mov _time5,al ; Längenzähler überschreiben
mov al,_time6
push ax ; Byte für Längenzähler sichern
mov di,offset _time6
mov ax,2
call GetTime
pop ax
mov _time6,al ; Längenzähler überschreiben
; und Maske ausgeben
WRITE_STRING msg3
ret
; ----------------------------
; Starte_StopUhr
;
; Funktion: Startet die Stopuhr und gibt die Startzeit aus
;
msg0 db CR,LF
db 'Zuerst die Stopuhr starten ... '
db CR,LF
GETLENGTH msg0
msg00 db 'Stopuhr gestartet um'
_time0 db ' __:__:__:__'
db CR,LF
GETLENGTH msg00
Starte_StopUhr:
WRITE_STRING msg0
; Stopuhr starten
; Routine soll die Startzeit bei ES:DI
; im Stringformat speichern
mov al,_time0 ; Byte sichern, da der Längenzähler nicht
; benötigt wird!
push ax
mov bx,offset timetable
mov di,offset _time0
xor ax,ax
call StartTimer
pop ax
mov _time0,al ; Längenzähler wieder überschreiben
; Startzeit anzeigen
WRITE_STRING msg00
ret
; ----------------------------
; Stoppe_StopUhr
;
; Funktion: Stopt die Stopuhr und gibt die Stop- und Laufzeit aus
;
msg1 db CR,LF
db 'Zum Schluß die Stopuhr stoppen ... '
db CR,LF
GETLENGTH msg1
msg10 db 'Stopuhr gestopt um '
_time1 db ' __:__:__:__'
db CR,LF
GETLENGTH msg10
msg11 db '-----------------------------------'
db CR,LF
db 'Die Laufzeit beträgt'
_time2 db ' __:__:__:__'
db CR,LF
GETLENGTH msg11
msg12 db 'Die Laufzeit konnte nicht berechnet werden!'
db CR,LF
db 'Sehr wahrscheinlich haben Sie die Zeit verändert!'
db CR,LF
GETLENGTH msg12
Stoppe_StopUhr:
WRITE_STRING msg1
; Stopuhr stoppen
; Routine soll die Stoppzeit bei ES:DI
; im Stringformat speichern
mov al,_time1 ; Byte sichern, da der Längenzähler nicht
; benötigt wird!
push ax
mov bx,offset timetable
mov di,offset _time1
xor ax,ax
call StopTimer
pop ax
mov _time1,al ; Längenzähler wieder überschreiben
; nun die Laufzeit konvertieren
mov al,_time2 ; Byte sichern, da der Längenzähler nicht
; benötigt wird!
push ax
mov bx,offset TimeTable
mov di,offset _time2
xor ax,ax
call Berechne_Laufzeit
pop ax
mov _time2,al ; Längenzähler wieder überschreiben
pushf ; Ergebnis von Berechne_Laufzeit sichern
WRITE_STRING msg10 ; Stoppzeit ausgeben
WRITE_STRING msg00 ; Startzeit nochmal ausgeben
popf ; Laufzeit korrekt ermittelt?
jnc >l1
WRITE_STRING msg12 ; Laufzeit konnte nicht ermittelt werden
ret
l1:
; Laufzeit anzeigen
WRITE_STRING msg11
ret